# 在 MATLAB 中，有一个非常有用的函数 reshape ，它可以将一个 m x n 矩阵重塑为另一个大小不同（r x c）的新矩阵，但保留其原始数据。 
# 
# 
#  给你一个由二维数组 mat 表示的 m x n 矩阵，以及两个正整数 r 和 c ，分别表示想要的重构的矩阵的行数和列数。 
# 
#  重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。 
# 
#  如果具有给定参数的 reshape 操作是可行且合理的，则输出新的重塑矩阵；否则，输出原始矩阵。 
# 
#  
# 
#  示例 1： 
#  
#  
# 输入：mat = [[1,2],[3,4]], r = 1, c = 4
# 输出：[[1,2,3,4]]
#  
# 
#  示例 2： 
#  
#  
# 输入：mat = [[1,2],[3,4]], r = 2, c = 4
# 输出：[[1,2],[3,4]]
#  
# 
#  
# 
#  提示： 
# 
#  
#  m == mat.length 
#  n == mat[i].length 
#  1 <= m, n <= 100 
#  -1000 <= mat[i][j] <= 1000 
#  1 <= r, c <= 300 
#  
# 
#  Related Topics 数组 矩阵 模拟 👍 430 👎 0
from typing import List


# leetcode submit region begin(Prohibit modification and deletion)
class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        m = len(mat)
        n = len(mat[0])
        newlist = [c*[0] for _ in range(r)]
        if n*m!=r*c:
            return mat
        # re = []
        # for i in range(m):
        #     for j in range(n):
        #         re.append(mat[i][j])
        # for i in range(r):
        #     for j in range(c):
        #         newlist[i][j] = re.pop(0)
        """
        方法二：不需要两个for循环,现在一共有m*n个数字，那么在已知长宽的情况下，知道第几个数字，即可知道数字在数组中的位置
        比如2*2数组中第三个元素就在[1][0]
        """
        for i in range(m*n):
            newlist[i//c][i%c] = mat[i//n][i%n]
        return newlist
# leetcode submit region end(Prohibit modification and deletion)
print(Solution().matrixReshape(mat=[[1,2,3,4]], r=2, c=2))